package gff.bsn;

import gff.constantes.Constantes;
import gff.model.bean.BeanFactory;
import gff.model.dao.CatalogosDAOImp;
import gff.model.dao.CatalogosImp;
import gff.vo.CatalogosVO;
import gff.vo.FuentesVO;
import gff.vo.InsumosVO;
import gff.vo.ParametrosVO;
import gff.vo.ReglasVO;
import gff.vo.UnidadesVO;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.log4j.Logger;

public class CatalogosBsn {

	private static final Logger log = Logger.getLogger(CatalogosBsn.class);

	public static HashMap<Long,InsumosVO > getInsumos() throws Exception {

		log.info("Clase:CatalogosBsn Metodo: getInsumos ");
		List<InsumosVO> respuesta = null;
		HashMap<Long,InsumosVO > insumos =new HashMap<Long, InsumosVO>() ;
		String[] fuentes = null;

		try {

			CatalogosDAOImp dao = (CatalogosDAOImp) BeanFactory.getBean("CatalogosDAO");

			respuesta = dao.getInsumos() ;


			for (InsumosVO insumo : respuesta ){


				fuentes =  null;
				fuentes = insumo.getIdFuente().split(",");


				for (String fuente : fuentes){
					if ( fuente!= null && !fuente.equals("")){
						insumo.getFuentes().add(fuente);
					}

				}

				insumos.put(Long.parseLong(insumo.getClave()), insumo);




			}


		} catch (Exception e) {
			log.error("Ocurrio un error en getInsumos: "
					+ e.getMessage());
		}

		return insumos;

	}

	public static int updateParametros(ParametrosVO param) throws Exception {

		log.info("Clase:CatalogosBsn Metodo: updateParametros ");

		int  respuesta =0;


		try {

			CatalogosDAOImp dao = (CatalogosDAOImp) BeanFactory.getBean("CatalogosDAO");

			respuesta = dao.updateParam(param) ;


		} catch (Exception e) {
			log.error("Ocurrio un error en getInsumos: "
					+ e.getMessage());
		}

		return respuesta;

	}

	public static int inserReglas(ReglasVO regla) throws Exception {

		log.info("Clase:CatalogosBsn Metodo: inserReglas ");

		int  respuesta =0;


		try {

			CatalogosDAOImp dao = (CatalogosDAOImp) BeanFactory.getBean("CatalogosDAO");

			respuesta = dao.insertRegla(regla);


		} catch (Exception e) {
			log.error("Ocurrio un error en inserReglas: "
					+ e.getMessage());
		}

		return respuesta;

	}

	public static ArrayList<ReglasVO> getReglas(ReglasVO regla) throws Exception {

		log.info("Clase:CatalogosBsn Metodo: inserReglas ");

		ArrayList<ReglasVO>  respuesta = null;


		try {

			CatalogosDAOImp dao = (CatalogosDAOImp) BeanFactory.getBean("CatalogosDAO");

			respuesta = dao.getReglas(regla);


		} catch (Exception e) {
			log.error("Ocurrio un error en inserReglas: "
					+ e.getMessage());
		}

		return respuesta;

	}

	public static HashMap<String,InsumosVO > getInsumosMap() throws Exception {

		log.info("Clase:CatalogosBsn Metodo: getInsumos ");

		HashMap<String ,InsumosVO>  insumosMap   =new HashMap<String ,InsumosVO>() ;


		try {


			insumosMap = CatalogosImp.getListInsumosMap();




		} catch (Exception e) {
			log.error("Ocurrio un error en getInsumos: "
					+ e.getMessage());
		}

		return insumosMap;

	}

	public static HashMap<String,FuentesVO > getFuentes() throws Exception {

		log.info("Clase:CatalogosBsn Metodo: getFuentes ");

		HashMap<String ,FuentesVO>  fuentesMap   =new HashMap<String ,FuentesVO>() ;


		try {


			fuentesMap = CatalogosImp.getListFuenteMap();




		} catch (Exception e) {
			log.error("Ocurrio un error en getFuentes: "
					+ e.getMessage());
		}

		return fuentesMap;

	}

	public static HashMap<String,UnidadesVO > getUnidadesMap() throws Exception {

		log.info("Clase:CatalogosBsn Metodo: getFuentes ");

		HashMap<String ,UnidadesVO>  unidadesMap   =new HashMap<String ,UnidadesVO>() ;


		try {


			unidadesMap = CatalogosImp.getListUnidadesMap();




		} catch (Exception e) {
			log.error("Ocurrio un error en getFuentes: "
					+ e.getMessage());
		}

		return unidadesMap;

	}

	public static void getParametros() throws Exception {

		log.info("Clase:CatalogosBsn Metodo: getParametros ");
		try {
			CatalogosImp.getParametros();
		} catch (Exception e) {
			log.error("Ocurrio un error en getParametros: "
					+ e.getMessage());
		}
	}

	public static ArrayList<ParametrosVO> getListParametros() throws Exception {

		log.info("Clase:CatalogosBsn Metodo: getListParametros ");

		try {

			return CatalogosImp.getLitsParametros();

		} catch (Exception e) {
			log.error("Ocurrio un error en getListParametros: "
					+ e.getMessage());
		}
		return null;
	}
	public static List<InsumosVO > getInsumosList() throws Exception {

		log.info("Clase:CatalogosBsn Metodo: getInsumosList ");
		List<InsumosVO> respuesta = null;
		String[] fuentes = null;

		try {

			CatalogosDAOImp dao = (CatalogosDAOImp) BeanFactory.getBean("CatalogosDAO");

			respuesta = dao.getInsumos() ;


			for (int i = 0 ; i< respuesta.size(); i++ ){	

				fuentes =  null;
				fuentes = respuesta.get(i).getIdFuente().split(",");

				for (String fuente : fuentes){

					respuesta.get(i).getFuentes().add(fuente);

				}

			}




		} catch (Exception e) {
			log.error("Ocurrio un error en getInsumosList: "
					+ e.getMessage());
		}

		return respuesta;

	}


	public static List<InsumosVO > getListaInsumos() throws Exception {

		log.info("Clase:CatalogosBsn Metodo: getInsumosList ");
		List<InsumosVO> respuesta = null;
		String[] fuentes = null;

		try {


			respuesta = CatalogosImp.getListInsumos();

			for (int i = 0 ; i< respuesta.size(); i++ ){	

				fuentes =  null;
				fuentes = respuesta.get(i).getIdFuente().split(",");

				for (String fuente : fuentes){

					respuesta.get(i).getFuentes().add(fuente);

				}

			}




		} catch (Exception e) {
			log.error("Ocurrio un error en getInsumosList: "
					+ e.getMessage());
		}

		return respuesta;

	}


	public static List<ReglasVO> getListaRegla(ReglasVO reglaParams) throws Exception {

		log.info("Clase:CatalogosBsn Metodo: getListaRegla ");
		List<ReglasVO> respuesta = null;
		try {


			respuesta = CatalogosImp.getRegla(reglaParams);





		} catch (Exception e) {
			log.error("Ocurrio un error en getListaRegla: "
					+ e.getMessage());
		}

		return respuesta;

	}

	public static ArrayList<FuentesVO> getListaFuentes() throws Exception {

		log.info("Clase:CatalogosBsn Metodo: getListaRegla ");
		ArrayList<FuentesVO> respuesta = null;
		try {


			respuesta = CatalogosImp.getListFuentes();





		} catch (Exception e) {
			log.error("Ocurrio un error en getListaRegla: "
					+ e.getMessage());
		}

		return respuesta;

	}

	public static ArrayList<UnidadesVO> getListaUnidades() throws Exception {

		log.info("Clase:CatalogosBsn Metodo: getListaRegla ");
		ArrayList<UnidadesVO> respuesta = null;
		try {


			respuesta = CatalogosImp.getListUnidades();





		} catch (Exception e) {
			log.error("Ocurrio un error en getListaRegla: "
					+ e.getMessage());
		}

		return respuesta;

	}

	public static int getIdMaxRegla() throws Exception {

		log.info("Clase:CatalogosBsn Metodo: getIdMaxRegla ");
		int respuesta = 0;
		try {


			respuesta = CatalogosImp.idMaxRegla();





		} catch (Exception e) {
			log.error("Ocurrio un error en getIdMaxRegla: "
					+ e.getMessage());
		}

		return respuesta;

	}


	public static ArrayList<ReglasVO> listReglaNombre(ReglasVO regla) throws Exception {

		log.info("Clase:CatalogosBsn Metodo: listReglaNombre ");
		ArrayList<ReglasVO> respuesta = null;
		try {


			respuesta = CatalogosImp.listNombreRegla(regla);





		} catch (Exception e) {
			log.error("Ocurrio un error en listReglaNombre: "
					+ e.getMessage());
		}

		return respuesta;

	}

	public static int updateReglas(ReglasVO regla) throws Exception {

		log.info("Clase:CatalogosBsn Metodo: listReglaNombre ");
		int respuesta = -1;
		try {

			CatalogosDAOImp dao = (CatalogosDAOImp) BeanFactory.getBean("CatalogosDAO");

			respuesta =dao.updateReglas(regla);





		} catch (Exception e) {
			log.error("Ocurrio un error en listReglaNombre: "
					+ e.getMessage());
		}

		return respuesta;

	}


	public static int eliminaReglas(ReglasVO regla) throws Exception {

		log.info("Clase:CatalogosBsn Metodo: eliminaReglas ");
		int respuesta = -1;
		try {

			CatalogosDAOImp dao = (CatalogosDAOImp) BeanFactory.getBean("CatalogosDAO");

			respuesta =dao.eliminaReglas(regla);





		} catch (Exception e) {
			log.error("Ocurrio un error en eliminaReglas: "
					+ e.getMessage());
		}

		return respuesta;

	}
	public static ArrayList<CatalogosVO> getCatalogo (int id_catalogo) throws Exception  {
		CatalogosVO catalogoVO = null;
		ArrayList<CatalogosVO> catalogoEstatus=new ArrayList<CatalogosVO>();
		if ( id_catalogo == Constantes.CAT_ESTATUS_CAT){

			catalogoVO=new CatalogosVO();
			catalogoVO.setIdCatalogo(Constantes.ACTIVO);
			catalogoVO.setIdCatalogoDesc(Constantes.ACTIVO_DESC);
			catalogoEstatus.add(catalogoVO);

			catalogoVO=new CatalogosVO();
			catalogoVO.setIdCatalogo(Constantes.DESACTIVO);
			catalogoVO.setIdCatalogoDesc(Constantes.DESACTIVO_DESC);
			catalogoEstatus.add(catalogoVO);

			//				catalogoVO=new CatalogosVO();
			//				catalogoVO.setIdCatalogo(Constantes.SELECT);
			//				catalogoVO.setIdCatalogoDesc(Constantes.SELECT_DESC);
			//				catalogoEstatus.add(catalogoVO);



		}

		return catalogoEstatus;
	}
}
